from PyQt5.QtWidgets import QListWidget, QAbstractItemView
from PyQt5.QtCore import Qt


class DropInList(QListWidget):
    def __init__(self, *args, **kwargs):
        super(DropInList, self).__init__(*args, **kwargs)
        self.setAcceptDrops(True)  # 开启接受拖入事件
        self.setDragEnabled(True)  # 开启拖出功能
        self.setSelectionMode(QAbstractItemView.ExtendedSelection)  # 开启多选模式
        self.setDefaultDropAction(Qt.MoveAction)  # 设置drop事件默认为移动事件

    def dropEvent(self, drop_event):
        source_widget = drop_event.source()  # 获取拖入元素的父组件
        items = source_widget.selectedItems()
        for item in items:
            source_widget.takeItem(source_widget.indexFromItem(item).row())  # 通过实时计算选中的item的索引来删除listItem
            self.addItem(item)
        self.sortItems()

    def get_items(self):
        items = [self.item(i).text() for i in range(self.count())]
        return items
